/**
 * Fichier JpaDaoEnseignant.java : Définition de classe
 * fr.unice.gnpt.core.dao.jpa.JpaDaoEnseignant : Fabrique de DAO de type
 * Enseignant pour JPA
 * 
 * Auteurs : Groupe GNPT : Gastinel, Nicolas, Pellegrino, Trovato
 */
package fr.unice.gnpt.core.dao.jpa;

import java.util.Properties;

import javax.persistence.Query;

import fr.unice.gnpt.core.Enseignant;
import fr.unice.gnpt.core.dao.DaoEnseignant;
import fr.unice.gnpt.core.dao.DaoException;

/**
 * Classe de gestion de DAO de type enseignant pour JPA.
 * 
 * @author gnpt
 * @version 0.1.1
 */
public class JpaDaoEnseignant extends JpaDaoGenerique<Enseignant, Long>
		implements DaoEnseignant {
	/**
	 * Constructeur par défaut.
	 * 
	 * @param proprietesConnexion
	 *            les propriétés de connexion à passer au DAO, contenant les
	 *            informations nécessaires pour que le DAO puisse se connecter
	 *            avec JPA.
	 */
	public JpaDaoEnseignant(Properties proprietesConnexion) {
		super(Enseignant.class, proprietesConnexion);
	}

	/**
	 * @throws DaoException
	 * @see fr.unice.gnpt.core.dao.DaoEnseignant#findByNomPrenom(java.lang.String,
	 *      java.lang.String)
	 */
	@Override
	public Enseignant findByNomPrenom(String nom, String prenom)
			throws DaoException {
		Enseignant ens;
		try {
			Query query = this.getConnexion().getConnexion().createNamedQuery(
					"Enseignant.findByNomPrenom");
			query.setParameter("nom", nom.toLowerCase());
			query.setParameter("prenom", prenom.toLowerCase());
			ens = (Enseignant) query.getSingleResult();
		} catch (Exception e) {
			throw new DaoException(
					"Erreur lors de la requête nommée JPA Enseignant.findByNomPrenom.",
					e);
		}
		return ens;
	}
}
